package com.nado.extensions.reload;

/**
 * Reload 기능을 사용하기 위한 인터페이스.
 * <p/>
 * {@link ObjectWatcher}에 등록된 {@link Reloadable} 객체는 ObjectWatcher에 의해 사용되며,
 * 이벤트 발생 여부를 확인하는 API({@link #isChanged})와 이 경우에 해당하는 이벤트를 처리하는 API({@link #load})로 구성된다.
 * <p/>
 * 이 과정은 모두 하나의 스레드에 의해서 처리되므로 구현된 API 내부에 Blocking sequence가 존재해서는 안 된다.
 *
 */
public interface Reloadable {

	/**
	 * 환경 정보 상태를 반환한다.
	 *
	 * @return 환경 정보 변경 시 true를 반환한다.
	 */
	boolean isChanged();

	/**
	 * 상태가 변경된 경우 reloading을 수행한다.
	 */
	boolean load();
}